# 从 dashscope 库（阿里云官方提供的 SDK）中导入 Generation 模块。
# dashscope 是阿里云百炼平台为通义大模型（如 Qwen）提供的 Python SDK。
# Generation 是专门用于文本生成任务（如问答、摘要、翻译、对齐提示等）的接口类。
from dashscope import Generation
# 导入 Python 内置的 os 模块,用于读取操作系统环境变量（比如从 .env 文件加载的 QWEN_API_KEY
import os
# load_dotenv()自动加载项目根目录下的 .env 文件中的环境变量到当前运行环境中
from dotenv import load_dotenv
# 执行加载 .env 文件的操作
load_dotenv()
# 导入超时异常处理
import json
import time

# 定义一个名为 call_qwen 的函数,函数最终返回一个字符串（即模型生成的文本）
def call_qwen(prompt: str) -> str:
    """
    调用通义千问大模型

    Args:
        prompt (str): 用户输入的提示词

    Returns:
        str: 模型生成的文本响应

    Raises:
        Exception: 当API调用失败时抛出异常
    """
    try:
        # 记录开始时间用于监控调用耗时
        start_time = time.time()

        # Generation.call()：调用通义千问的文本生成 API
        response = Generation.call(
            # 调用模型
            model="qwen-turbo",
            # .env读取 API 密钥
            api_key=os.getenv("QWEN_API_KEY"),
            # 将你构造的提示词传给模型
            prompt=prompt,
            # 设置超时时间为60秒
            timeout=60
        )

        # 记录响应时间
        end_time = time.time()
        duration = end_time - start_time
        print(f"⏱️ Qwen API调用耗时: {duration:.2f}秒")

        # 检查响应状态
        if response.status_code == 200:
            # response.output.text 是模型生成的纯文本字符串
            return response.output.text
        else:
            raise Exception(f"Qwen API调用失败，状态码: {response.status_code}, 消息: {response.message}")

    except Exception as e:
        print(f"❌ Qwen API调用异常: {str(e)}")
        # 重新抛出异常，由上层处理
        raise Exception(f"大模型调用失败: {str(e)}")

if __name__ == "__main__":
    print("API Key:", os.getenv("QWEN_API_KEY")) 
    test_prompt = "你好，用英文怎么说？"
    print(f"提问: {test_prompt}")
    try:
        answer = call_qwen(test_prompt)
        print(f"回答: {answer}")
    except Exception as e:
        print(f"调用失败: {e}")
